package org.example.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;

import java.util.ArrayList;
import java.util.List;

/**
 * 该MenuModel对象封装的意图就是源于前端的路由表：
 * {
 *     path: '/sys',
 *     component: Layout,
 *     redirect: '/sys/user',
 *     name: 'SysManager',
 *     meta: { title: '系统管理', icon: 'el-icon-s-help' },
 *     children: [
 *       {
 *         path: 'user', // /sys/user
 *         name: 'UserManager',
 *         component: () => import('@/views/user/index'),
 *         meta: { title: '用户管理', icon: 'table' }
 *       },
 *       {
 *         path: 'dept',
 *         name: 'DepartmentManager',
 *         component: () => import('@/views/dept/index'),
 *         meta: { title: '部门管理', icon: 'tree' }
 *       }
 *     ]
 *   }
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
//是为了满足vue的数据，定义的model
public class MenuModel {

    // @JsonIgnore是转json的时候忽略该属性
//    @JsonIgnore
    private Integer id;

    private String path;
    private String component;
    private String name;
    private Boolean hidden;
    /**
     * @JsonInclude(value= JsonInclude.Include.NON_EMPTY) 这个注释的作用
     *   该注解达到的效果是: 如果 children为null, 或者长度为0的时候，转json会将其忽略；
     *   为什么要加该注解：对于前端路由来说，如果children没有为null, 或者长度为0的时候，又存在该属性，那么前端会报错
     *       所以为了前端不出问题，就加上该属性。
     */
    @JsonInclude(value= JsonInclude.Include.NON_EMPTY)
    private List<MenuModel> children;
    private Meta meta;
    private List<String> labelList;
    private Integer type;
    private String top;
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    public static class Meta {
        private String title;
        private String icon;
    private List<String> permission = new ArrayList<>();
    }
}
